Ext.onReady(function() {
	if (username == null)
		return;
	Ext.QuickTips.init();

	function pageLoad() {

		Ext.define('RuleModel', {
			extend : 'Ext.data.Model',
			fields : [{
				name : 'rulId'
			}, {
				name : 'rulName'
			}, {
				name : 'rulDescription'
			}, {
				name : 'rulEnabled',
				convert : function(value, record) {
					if (value == 1)
						return "是";
					if (value == 0)
						return "否";
				}
			}, {
				name : 'rulSeverity',
				convert : function(value, record) {
					if (value == 1)
						return "一般";
					if (value == 0)
						return "轻微";
					if (value == 2)
						return "严重";
				}
			}, {
				name : 'rulCategory',
				type : 'date',
				convert : function(value, record) {
					if (value == 0)
						return "文件系统";//可靠性
					if (value == 1)
						return "数据库";//性能
					if (value == 2)
						return "安全";//常规
					if (value == 3)
						return "云平台服务";//质量
					if (value == 4)
						return "其他";//伸缩性
				}
			}, {
				name : 'rulFirstAlerts'
			}, {
				name : 'rulFirstDaysEach'
			}, {
				name : 'rulNextAlerts'
			}, {
				name : 'rulNextDaysEach'
			}, {
				name : 'rulAllFurtherDayEach'
			}]
		});
		Ext.define('RemediationModel', {
			extend : 'Ext.data.Model',
			fields : [{
				name : 'remId'
			}, {
				name : 'remName'
			}, {
				name : 'remText'
			}, {
				name : 'remDescription'
			}, {
				name : 'remCode'
			}, {
				name : 'remIncludeEffort'
			}, {
				name : 'remFirstAlerts'
			}, {
				name : 'remFirstDaysEach'
			}, {
				name : 'remNextAlerts'
			}, {
				name : 'remNextDaysEach'
			}, {
				name : 'remAllFurtherDaysEach'
			}]
		});
		var selStore = new Ext.data.JsonStore({
			root : 'result.list',
			totalProperty : 'total',
			idProperty : 'remId',
			fields : ['remId', 'remName', 'remText', 'remDescription', 'remCode', 'remIncludeEffort', 'remFirstAlerts', 'remFirstDaysEach', 'remNextAlerts', 'remNextDaysEach', 'remAllFurtherDaysEach'],
			proxy : new Ext.data.HttpProxy({
				url : 'rule_getRemediations.action',
				method : 'post'
			})
		});
		var selstore = Ext.create('Ext.data.Store', {
			autoload : true,
			pageSize : pSize,
			model : 'RemediationModel',
			remoteSort : true,
			proxy : {
				type : 'ajax',
				url : 'rule_ getRemediations.action',
				method : 'POST',
				reader : {
					idProperty : 'remId',
					root : 'result.list',
					totalProperty : 'total'
				},
				simpleSortMode : true
			}
		});

		var RuleStore = Ext.create('Ext.data.Store', {
			autoload : {
				start : 0,
				limit : pSize
			},
			pageSize : pSize,
			model : 'RuleModel',
			remoteSort : true,
			proxy : {
				type : 'ajax',
				url : 'rule_ruleList.action',
				method : 'POST',
				reader : {
					idProperty : 'rulId',
					root : 'result.list',
					totalProperty : 'result.total'
				},
				simpleSortMode : true
			}
		});

		var RuleGrid = Ext.create('Ext.grid.Panel', {
			itemId : 'RuleGrid',
			store : RuleStore,

			columnLines : true,
			autoHeight : true,
			autoWidth : true,
			title : '规则列表',
			frame : true,
			loadMask : true,

			viewConfig : {
				stripeRows : true
			},
			columns : [{
				text : "名称",
				width : 200,
				dataIndex : 'rulName',
				sortable : true
			}, {
				text : "描述",
				width : 650,
				dataIndex : 'rulDescription',
				sortable : true
			}, {
				text : "类型",
				width : 100,
				dataIndex : 'rulCategory',
				sortable : true
			},
			//	renderer: function (value, meta, record) {return record.raw.application.appName;}
			{
				text : "可用性",
				width : 60,
				dataIndex : 'rulEnabled',
				sortable : true
			}, {
				text : "严重度",
				width : 60,
				dataIndex : 'rulSeverity',
				sortable : true
			}, {
				text : "操作",
				menuDisabled : true,
				sortable : false,
				xtype : 'actioncolumn',
				items : [{
					iconCls : 'icon-delete', // Use a URL in the icon config
					tooltip : '删除规则',
					text : '删除',
					handler : function(grid, rowIndex, colIndex) {

						Ext.MessageBox.confirm('提示', '您确定要删除所选吗?', function(btnId) {
							if (btnId == 'yes') {

								var rec = grid.store.getAt(rowIndex);
								var msgTip = Ext.MessageBox.show({
									title : '提示',
									width : 250,
									msg : '正在删除请稍候...'
								});
								Ext.Ajax.request({
									url : 'rule_delRule.action',
									params : {
										rulName : rec.get('rulName'),
										rulId : rec.get('rulId')
									},
									method : 'POST',
									success : function(response) {
										msgTip.hide();
										var result = Ext.JSON.decode(response.responseText);
										if (result.success) {
											grid.store.remove(rec);
											Ext.Msg.alert('提示', '报告删除成功!');
										} else {
											Ext.Msg.alert('提示', '报告删除失败!信息被其他数据引用');
										}
									},
									failure : function(response) {

										Ext.Msg.alert('提示', '报告删除失败!信息被其他数据引用');

									}
								});
							}
						});
					}
				}, {
					iconCls : 'icon-editfind', // Use a URL in the icon config
					tooltip : '查看规则',
					attr : 'style="margin-left:100"',
					handler : function(grid, rowIndex, colIndex) {
						var rec = grid.store.getAt(rowIndex);
						showWindow(rec, "view");
					}
				}, {
					iconCls : 'icon-downArrow', // Use a URL in the icon config
					tooltip : '修改规则',
					attr : 'style="margin-left:100"',
					handler : function(grid, rowIndex, colIndex) {
						var rec = grid.store.getAt(rowIndex);
						showWindow(rec, "modify");
					}
				}]
			}], // end columns
			features : [{
				ftype : 'filters',
				encode : true,
				local : false,
				filters : [{
					type : 'string',
					dataIndex : 'rulName',
					disabled : false
				}]
			}],
			dockedItems : [{
				dock : 'top',
				xtype : 'toolbar',
				items : [{
					itemId : 'addButton',
					text : '创建规则',
					tooltip : '创建规则',
					iconCls : 'icon-add',
					scope : this,
					handler : function() {
						var rec = null;
						showWindow(rec, "add");
					}
				}, '-', {
					xtype : 'FileDownloader',
					itemId : 'RuleDownloader',
					width : 0,
					height : 0
				}, '-', {
					text : 'Excel',
					tooltip : '导出Excel列表',
					scope : this,
					iconCls : 'icon-excel',
					handler : function() {
						//                    var list = getExcelParams(Ext.getCmp('UsersGrid'));
						var list = getExcelParams(Ext.getCmp('RuleGrid'));
						var downloader = Ext.getCmp('RuleDownloader');
						downloader.load({
							params : {
								preFilter : list[0],
								filter : list[1],
								sort : list[2],
								dir : list[3],
								headers : list[4],
								cheaders : list[5],
								title : list[6]
							},
							url : 'userstoExcel.action'
						});
					}
				}, '-', '显示记录数', {
					itemId : 'RuleCmbNum',
					name : 'RuleCmbNum',
					xtype : 'combo',
					width : 50,
					allowBlank : false,
					blankText : '必须选择页面大小!',
					store : pageStore,
					value : pSize,
					editable : false,
					loadingText : '正在加载...',
					displayField : 'name',
					valueField : 'abbr',
					emptyText : '请选择页面大小',
					queryMode : 'local',
					listeners : {
						select : function(combo, record, index) {
							pSize = this.getValue();
							RuleStore.pageSize = pSize;
							RuleStore.load();
						}
					}
				}]
			}, Ext.create('Ext.PagingToolbar', {
				pageSize : pSize,
				dock : 'bottom',
				store : RuleStore,
				displayInfo : true,
				displayMsg : '显示 {0} - {1} 条，共计 {2} 条',
				emptyMsg : '没有数据',
				plugins : Ext.create('Ext.ux.ProgressBarPager', {})
			})], // end docked items
			listeners : {
				beforerender : function(grid, opts) {
					RuleStore.pageSize = pSize;
					RuleStore.load();
				}
			}

		});
		//end ReportGrid

		// 查看报告窗口
		function showWindow(rec, op) {
			console.log("showWindow-Rule");
			console.log(rec);
			if (op == "view") {
				var ruleForm = Ext.create('Ext.form.Panel', {
					frame : true,
					bodyStyle : 'padding:5px 5px 0',
					autoWidth : true,
					fieldDefaults : {
						msgTarget : 'side',
						labelWidth : 120
					},
					defaultType : 'textfield',
					defaults : {
						anchor : '100%'
					},
					items : [{
						xtype : 'textfield',
						itemId : 'rulName',
						name : 'rulName',
						columnWidth : 0.5,
						fieldLabel : '规则名<span style="color:red;">*</span>',
						allowBlank : false,
						readOnly : true
					}, {
						xtype : 'textfield',
						itemId : 'rulDescription',
						name : 'rulDescription',
						columnWidth : 0.5,
						fieldLabel : '规则描述<span style="color:red;">*</span>',
						allowBlank : false,
						readOnly : true
					},{
						xtype : 'textfield',
						itemId : 'rulEnabled',
						name : 'rulEnabled',
						columnWidth : 0.5,
						fieldLabel : '规则可用性<span style="color:red;">*</span>',
						allowBlank : false,
						readOnly : true
					}, {
						xtype : 'textfield',
						itemId : 'rulCategory',
						name : 'rulCategory',
						columnWidth : 0.5,
						fieldLabel : '规则类别<span style="color:red;">*</span>',
						allowBlank : false,
						readOnly : true
					}, {
						xtype : 'textfield',
						itemId : 'rulSeverity',
						name : 'rulSeverity',
						columnWidth : 0.5,
						fieldLabel : '规则严重性<span style="color:red;">*</span>',
						allowBlank : false,
						readOnly : true
					}]
				});
			} else {
				var ruleForm = Ext.create('Ext.form.Panel', {
					frame : true,
					bodyStyle : 'padding:5px 5px 0',
					autoWidth : true,
					fieldDefaults : {
						msgTarget : 'side',
						labelWidth : 120
					},
					defaultType : 'textfield',
					defaults : {
						anchor : '100%'
					},
					items : [{
						xtype : 'textfield',
						itemId : 'rulName',
						name : 'rulName',
						columnWidth : 0.5,
						fieldLabel : '规则名<span style="color:red;">*</span>',
						allowBlank : false

					}, {
						xtype : 'textfield',
						itemId : 'rulDescription',
						name : 'rulDescription',
						columnWidth : 0.5,
						fieldLabel : '规则描述<span style="color:red;">*</span>',
						allowBlank : false

					}, {
						xtype : 'textfield',
						itemId : 'rulFirstDaysEach',
						name : 'rulFirstDaysEach',
						columnWidth : 0.5,
						fieldLabel : 'FirstDaysEach',
						hidden : true

					}, {
						xtype : 'textfield',
						itemId : 'rulFirstAlerts',
						name : 'rulFirstAlerts',
						columnWidth : 0.5,
						fieldLabel : '第一个警告',
						hidden : true

					}, {
						xtype : 'textfield',
						itemId : 'rulNextDaysEach',
						name : 'rulNextDaysEach',
						columnWidth : 0.5,
						fieldLabel : 'NextDaysEach',
						hidden : true

					}, {
						xtype : 'textfield',
						itemId : 'rulNextAlerts',
						name : 'rulNextAlerts',
						columnWidth : 0.5,
						fieldLabel : '下一个警告',
						hidden : true

					}, {
						xtype : 'numberfield',
						itemId : 'rulAllFurtherDayEach',
						name : 'rulAllFurtherDayEach',
						columnWidth : 0.5,
						fieldLabel : 'AllFurtherDayEach',
						hidden : true

					}, {
						xtype : 'combo',
						itemId : 'rulEnabled',
						name : 'rulEnabled',
						hiddenName : 'name',
						columnWidth : 0.5,
						fieldLabel : '规则可用性<span style="color:red;">*</span>',
						allowBlank : false,
						multiSelect : false,
						valueField : 'value',
						displayField : 'name',
						store : new Ext.data.SimpleStore({
							fields : ['name', 'value'],
							data : [['否', '0'], ['是', '1']]
						}),
						mode : 'local', // default: remote
						emptyText : '请选择可用性',
						readOnly : false,
						editable : false,

					}, {
						xtype : 'combo',
						itemId : 'rulCategory',
						name : 'rulCategory',
						hiddenName : 'name',
						columnWidth : 0.5,
						fieldLabel : '规则类别<span style="color:red;">*</span>',
						allowBlank : false,
						multiSelect : false,
						valueField : 'value',
						displayField : 'name',
						store : new Ext.data.SimpleStore({
							fields : ['name', 'value'],
							//data : [['性能', '0'], ['可靠性', '1'], ['常规', '2'], ['质量', '3'], ['伸缩性', '4']]
							data : [['文件系统', '0'], ['数据库', '1'], ['安全', '2'], ['云平台服务', '3'], ['其他', '4']]
						}),
						mode : 'local', // default: remote
						emptyText : '请选择类别',
						readOnly : false,
						editable : false,

					}, {
						xtype : 'combo',
						itemId : 'rulSeverity',
						name : 'rulSeverity',
						hiddenName : 'name',
						columnWidth : 0.5,
						fieldLabel : '规则严重性<span style="color:red;">*</span>',
						allowBlank : false,
						multiSelect : false,
						valueField : 'value',
						displayField : 'name',
						store : new Ext.data.SimpleStore({
							fields : ['name', 'value'],
							data : [['轻微', '0'], ['一般', '1'], ['严重', '2']]
						}),
						mode : 'local', // default: remote
						emptyText : '请选择严重性',
						readOnly : false,
						editable : false,

					}],
					buttons : [{
						text : '确定',
						handler : submitForm
					}, {
						text : '取消',
						handler : function() {
							ruleForm.destroy();
							ruleWindow.destroy();
						}
					}]

				});
			}
			function submitForm() {
				values = ruleForm.form.getValues();
				if (values.id == "") {
					values.id = 0;
				}
				var JSONobj = [];
				//JSONobj.push(values);
				JSONobj.push(JSON.stringify(values));

				if (op == "add") {
					ruleForm.form.submit({
						// TODO　暂时先把客户端验证disable
						clientValidation : false,
						waitMsg : '正在提交数据请稍候...',
						waitTitle : '提示',
						url : 'rule_addRule.action',
						method : 'post',
						params : {
							datas : JSONobj
						},
						success : function(form, action) {

							Ext.Msg.alert('提示', "规则保存成功！");
							RuleStore.load();

						},
						failure : function(form, action) {

							Ext.MessageBox.show({
								title : '错误',
								msg : '信息保存失败!请检查规则名是否有重名！',
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR
							});

						}
					});
				} else if (op == "modify") {
					ruleForm.form.submit({
						// TODO　暂时先把客户端验证disable
						clientValidation : false,
						waitMsg : '正在提交数据请稍候...',
						waitTitle : '提示',
						url : 'rule_modifyRule.action',
						method : 'post',
						params : {
							datas : JSONobj,
							rulId : rec.get('rulId')
						},
						success : function(form, action) {

							Ext.Msg.alert('提示', "规则修改成功！");
							RuleStore.load();

						},
						failure : function(form, action) {

							Ext.MessageBox.show({
								title : '错误',
								msg : '规则修改失败!请检查规则名是否有重名！',
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR
							});

						}
					});
				}
			}

			var ruleWindow = new Ext.Window({// 创建弹出窗口
				layout : 'fit',
				width : 500,
				closeAction : 'hide',
				height : 250,
				resizable : false,
				shadow : true,
				modal : true,
				closable : true,
				bodyStyle : 'padding:5 5 5 5',
				animCollapse : true,
				items : [ruleForm]
			});
			if (rec != null) {
				ruleForm.loadRecord(rec);
				//            reportForm.down('#username').readonly = true;
				//            reportForm.down('#rolecode').setValue(rec.data.webRole.rolecode);
			}
			ruleWindow.doLayout();
			ruleWindow.show();
		}

		var tab = Ext.getCmp('mainContent').getActiveTab();
		tab.items.add(RuleGrid);
		tab.doLayout();
	}

	pageLoad();

});
